<?php

class Contrato_PropostaController extends App_Controller_Crud
{
    protected $_sModelo = 'ConProposta';
    protected $_stPaginaPrincipal = 'index';
    protected $_sRedirectGravar   = 'index';

    public function indexAction()
    {
        $oGrid = $this->_getGrid();
        $this->view->assign('sGrid', $oGrid->deploy());
    }

    /**
     * Carrega dados que não são do model relacionado com o controller
     * @return void
     */
    protected function _carregarExtrasFormulario()
    {
        parent::_carregarExtrasFormulario();
        $fk_proposta = $this->_getParam('id');

        if ($fk_proposta) {
            $modelTarefaTipo = new Model_TarefaTipo();
            $this->view->rowSetTarefaTipo = $modelTarefaTipo->fetchAll();

            $modelEntrega     = new Model_ConEntrega();
            $rowSetEntregas = $modelEntrega->fetchAll(array('fk_proposta = ?' => $fk_proposta, 'fk_entrega_pai is null'), 'st_codigo');
            $this->view->rowSetEntregas = $modelEntrega->getTree($rowSetEntregas);
        } else {
            // Código
            $codigo = 'EV' . date('y');
            $stCodigoUltimo = 1;
            $modelProposta = new Model_ConProposta();
            $rowUltimaProposta = $modelProposta->fetchRow("st_codigo like '{$codigo}%'", 'st_codigo desc');
            if ($rowUltimaProposta) {
                $stCodigoUltimo = $rowUltimaProposta->st_codigo;
                $stCodigoUltimo = substr($stCodigoUltimo, 5);
                $stCodigoUltimo++;
            }

            $codigo = $codigo . str_pad($stCodigoUltimo, 4, 0, STR_PAD_LEFT);
            $this->view->row->st_codigo = $codigo;
            $this->view->row->fk_usuario_responsavel = Zend_Auth::getInstance()->getIdentity()->id_usuario;
            $this->view->row->qt_dias_validade = 5;
            $this->view->row->qt_parcelas = 3;
            $this->view->row->vl_total = 0;
        }
    }

    /**
     * Chamado depois do gravar, pode ser utilizado para redirecionar o usuário para actions dependendo de valores
     * @param $id
     * @param array $aInfoExtra - Array de Informações Extra
     * @return void
     */
    protected function posGravar($id = null, $aInfoExtra = array())
    {
        if (!$this->_getParam('id_proposta')) {
            $this->_redirect('contrato/proposta/formulario/id/' . $id);
        }
    }

    public function formularioEntregaAction()
    {
        $id_entrega  = $this->_getParam('id_entrega');
        $fk_proposta = $this->_getParam('fk_proposta');

        $aTiposRelacionado = array();
        $modelEntrega = new Model_ConEntrega();
        if ($id_entrega) {
            $row = $modelEntrega->find($id_entrega)->current();
            $rowSetTiposRelacionado = $row->findModel_ConEntregaTarefaTipo();
            foreach ($rowSetTiposRelacionado as $rowTipo) {
                $aTiposRelacionado[] = $rowTipo->fk_tarefa_tipo;
            }
        } else {
            $row = $modelEntrega->createRow(array('fk_proposta' => $fk_proposta));
        }

        // Tipo de tarega
        $modelTarefaTipo = new Model_TarefaTipo();
        $rowSetTarefaTipo = $modelTarefaTipo->fetchAll();
        $aTarefasTipo = array();
        foreach ($rowSetTarefaTipo as $rowTipo) {
            $aTarefasTipo[$rowTipo->id_tarefa_tipo] = $rowTipo->st_nome;
        }
        $this->view->aTarefasTipo      = $aTarefasTipo;
        $this->view->aTiposRelacionado = $aTiposRelacionado;

        $this->view->assign('row', $row);
        $this->view->assign('aReferencias', $modelEntrega->carregarArrayDadosReference());

        // Entrega pai
        $aEntregasPai = array(null => 'Raiz');
        $rowSetEntreasPai = $modelEntrega->fetchAll(array('fk_proposta = ?' => $row->fk_proposta), 'st_codigo');
        foreach ($rowSetEntreasPai as $rowEntregaPai) {
            if ($rowEntregaPai->id_entrega == $id_entrega) {
                continue;
            }
            $aEntregasPai[$rowEntregaPai->id_entrega] = "[{$rowEntregaPai->st_codigo}] {$rowEntregaPai->st_nome}";
        }
        $this->view->aReferencias['fk_entrega_pai'] = $aEntregasPai;
    }

    /**
     * Grava os dados submetidos via post na tabela
     * @return void
     */
    public function gravarEntregaAction()
    {
        if ($this->_request->isPost()) {
            $oModelo     = new Model_ConEntrega();
            $aInfoExtra['oModelo'] = $oModelo;

            try {
                $this->antesGravar( $aInfoExtra );
                $id = $oModelo->gravar( $this->_getAllParams() );
                $this->_addMessage('Registro gravado com sucesso');
            } catch(Exception $e) {
                $this->_addMessage('Erro ao tentar gravar o registro');
                if(APPLICATION_ENV == 'development') {
                    throw $e;
                }
            }
        }
        $this->_redirect('contrato/proposta/formulario/id/' . $this->_getParam('fk_proposta'));
    }

    public function gerarPdfAction()
    {
        $idProposta = $this->_getParam('id_proposta');

        $modelProposta = new Model_ConProposta();
        $rowProposta = $modelProposta->find($idProposta)->current();

        $this->view->rowProposta = $rowProposta;
        $this->view->bHtml = $this->_hasParam('html', false);
        $html = $this->view->render('proposta/gerar-pdf.phtml');

        if ($this->_hasParam('html', false)) {
            echo $html; die;
        }


        $nomeArquivo = $rowProposta->st_codigo . '.pdf';

        $pdf = new App_Pdf();
        $pdf->preparar($rowProposta->st_nome, 'Gestão da Qualidade', 'FORM. 0001 ', 'alfa');
        $pdf->AddPage();
        $pdf->SetFont('helvetica', '', 8);
        $pdf->writeHTML($html, true, false, false, false, '');
        $pdf->Output($nomeArquivo, 'I'); die;
    }
}
